package com.meicunbing.viberplugin.db;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

public class CityListDbAdapter {
	public static final String KEY_CITY = "city";
	public static final String KEY_CODE = "code";
	public static final String KEY_ROWID = "_id";

	private DatabaseHelper databaseHelper;
	private Context context;
	private SQLiteDatabase sqliteDatabase;

	public CityListDbAdapter(Context context) {
		this.context = context;
	}

	/**
	 * 打开数据库连接
	 */
	public void open() {
		databaseHelper = new DatabaseHelper(context);
		try {
			sqliteDatabase = databaseHelper.getWritableDatabase();
		} catch (SQLiteException ex) {
			sqliteDatabase = databaseHelper.getReadableDatabase();
		}
	}

	/**
	 * 关闭数据库连接
	 */
	public void close() {
		sqliteDatabase.close();
	}

	/**
	 * 向数据库表中插入一条数据
	 * 
	 * @param title
	 *            字段值
	 * @param body
	 *            字段值
	 */
	public long createCityCode(String city, String code) {
		ContentValues content = new ContentValues();
		content.put(KEY_CITY, city);
		content.put(KEY_CODE, code);
		// content为插入表中的一条记录，类似与HASHMAP，是以键值对形式存储。
		// insert方法第一参数：数据库表名，第二个参数如果CONTENT为空时则向表中插入一个NULL,第三个参数为插入的内容
		return sqliteDatabase.insert(DatabaseHelper.DATABASE_TABLE, null,
				content);
	}

	/**
	 * 删除表中符合条件的记录
	 * 
	 * @param rowId
	 *            删除条件
	 * @return 是否删除成功
	 */
	public boolean deleteCityCode(long rowId) {
		// delete方法第一参数：数据库表名，第二个参数表示条件语句,第三个参数为条件带?的替代值
		// 返回值大于0表示删除成功
		return sqliteDatabase.delete(DatabaseHelper.DATABASE_TABLE, KEY_ROWID
				+ "=" + rowId, null) > 0;
	}

	/**
	 * 查询全部表记录
	 * 
	 * @return 返回查询的全部表记录
	 */
	public Cursor getAllCityCode() {
		// 查询表中满足条件的所有记录
		return sqliteDatabase.query(DatabaseHelper.DATABASE_TABLE,
				new String[] { KEY_ROWID, KEY_CITY, KEY_CODE },
				null, null, null, null, null);
	}

	/**
	 * 查询带条件的记录
	 * 
	 * @param rowId
	 *            条件值
	 * @return 返回查询结果
	 * @throws SQLException
	 *             查询时异常抛出
	 */
	public Cursor getCityCode(long rowId) throws SQLException {

		// 查询表中条件值为rowId的记录
		Cursor mCursor = sqliteDatabase.query(true,
				DatabaseHelper.DATABASE_TABLE, new String[] { KEY_ROWID,
				KEY_CITY, KEY_CODE }, KEY_ROWID + "="
						+ rowId, null, null, null, null, null);
		// mCursor不等于null,将标识指向第一条记录
		if (mCursor != null) {
			mCursor.moveToFirst();
		}
		return mCursor;

	}

	/**
	 * 更新数据库
	 * 
	 * @param rowId
	 *            行标识
	 * @param title
	 *            内容
	 * @param body
	 *            内容
	 * @return 是否更新成功
	 */
	public boolean updateCityCode(long rowId, String city, String code) {
		ContentValues args = new ContentValues();
		args.put(KEY_CITY, city);
		args.put(KEY_CODE, code);
		// 第一个参数:数据库表名,第二个参数更新的内容,第三个参数更新的条件,第四个参数条件带?号的替代者
		return sqliteDatabase.update(DatabaseHelper.DATABASE_TABLE, args,
				KEY_ROWID + "=" + rowId, null) > 0;
	}
}
